

typedef struct rsa_public_key {
   int e_value;
   int *p_n_array;
} rsa_public_key_t;

typedef struct rsa_private_key {
   int d_value;
   int *p_n_array;
} rsa_private_key_t;



/* e is the input
   prime (p or q) is the output */
int generate_prime(const int rsa_e_value,
                   int *p_prime_array,
                   const int int_length_of_p);


int bit_length(int p);

int mont_prod(int ares, int bres, int np, int n, int r);

int mod_exp(int m, int k, int np, int n, int r);
   

